﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Entidades.Seguridad;
using Entidades.Sistema.Base;
using Entidades.Sistema.Venta;
using MvcPaging;
using Modelo.Sistema.Base;
using Modelo.Seguridad;
using System.Web.UI.WebControls;
using VistaOnlineR1._1.Models;
using System.ComponentModel.DataAnnotations;
using DevExpress.Web.Mvc;

namespace VistaOnlineR1._1.Controllers.Sistema.Base
{
    public class ZonaController : BaseController
    {
       private const int DefaultPageSize = 10;

        #region campos
        CatalogoZona _catalogoZona;
        CatalogoBarrio _catalogoBarrio;
        CatalogoLocalidad _catalogoLocalidad;
        CatalogoEmpleado _catalogoEmpleado;        
        #endregion

        #region Constructors
        public ZonaController()
            : this(new CatalogoZona(), new CatalogoBarrio(), new CatalogoLocalidad(), new CatalogoEmpleado())
        {
        }
        public ZonaController(CatalogoZona catalogoZona, CatalogoBarrio catalogoBarrio, CatalogoLocalidad catalogoLocalidad, CatalogoEmpleado catalogoEmpleado)
        {
            _catalogoZona = catalogoZona;
            _catalogoBarrio = catalogoBarrio;
            _catalogoLocalidad = catalogoLocalidad;
            _catalogoEmpleado = catalogoEmpleado;
        }

   
        #endregion
       
        public ActionResult Index(int? page)
        {
            List<Perfil> listPerfil = RecuperarPerfil();

            ViewBag.PermisoDelete = listPerfil.Any(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCrear = listPerfil.Any(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEditar = listPerfil.Any(per => per.Permiso.Nombre == "Edit");
            ViewBag.Empleado = _catalogoEmpleado.Listarempleados().Where(x => x.Cargo.Nombre == "Repartidor").ToList();

            return View(_catalogoZona.ListarZona());
        }

        [ValidateInput(false)]
        public ActionResult EditZonaPartial()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            ViewBag.Zona = _catalogoZona.ListarZona();
            ViewBag.Empleado = _catalogoEmpleado.Listarempleados().Where(x => x.Cargo.Nombre == "Repartidor").ToList();
            
            return PartialView("EditZonaPartial", _catalogoZona.ListarZona());
        }


        [HttpGet]
        public ActionResult EditZonaUpdatePartial(int IdZona)
        {

            //Todo- Si el IdZona es -1 es porque la zona es nueva, entonces tenemos que listar las zonas que no tiene ninguna zona asignada
            Zona oZona = _catalogoZona.BuscarZona(IdZona);
            ViewBag.Barrio = _catalogoBarrio.ListarBarrio().ToList();            
            if (oZona == null)
            {
                oZona = new Zona();
                oZona.IdZona = -1;
            }
            ViewBag.Empleado = _catalogoEmpleado.Listarempleados().Where(x => x.Cargo.Nombre == "Repartidor").ToList();
            return View("EditingForm", oZona);
        }

        [HttpPost]
        [Authorize(Roles = "Administracion")]
        public ActionResult EditZonaUpdatePartial(Zona Zona)
        {
            string[] selectedItems = CheckBoxListExtension.GetSelectedValues<string>("lbModels");

            int idEmpleado = String.IsNullOrEmpty(Request.Params["IdEmpleado_VI"]) ? -1 : int.Parse(Request.Params["IdEmpleado_VI"]);

            foreach (var item in selectedItems)
            {
                Barrio oBarrio = _catalogoBarrio.BuscarBarrio(Convert.ToInt32(item));
                Zona.AgregarBarrio(oBarrio);
            }
            Zona.Empleado = _catalogoEmpleado.Listarempleados().FirstOrDefault(x => x.IdEmpleado == idEmpleado);
            if (Zona.IdZona == -1)
            {               
                _catalogoZona.AgregarZona(Zona);
            }
            else
            {
                _catalogoZona.ModificarZona(Zona);
            }
               

            return RedirectToAction("Index");
        }

        public ActionResult EditZonaDeletePartial(int IdZona)
        {
            _catalogoZona.EliminarZona(_catalogoZona.BuscarZona(IdZona));

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            return PartialView("EditZonaPartial", _catalogoZona.ListarZona());
        }

    }
}
